package com.zhanghe.study.study_scala.akka

import akka.actor.{Actor, ActorSystem, Props}

/**
 * actor自我通信
 * @author zh
 * @date 2021/5/10 10:39
 */
object TestSayHelloActor {
  def main(args: Array[String]): Unit = {
    // 创建ActorSystem，用于创建Actor
    val system : ActorSystem = ActorSystem("actorFactory")
    // 创建Actor的同时，返回一个ActorRef
    // actorOf的两个参数   第一个Props是通过反射创建了SayHelloActor的实例    第二个参数是为actor命名
    val actorRef = system.actorOf(Props[SayHelloActor],"sayHelloActor")
    // 发送消息
    actorRef.!("hello")
    actorRef.!("ok")
    actorRef.!("exit")
  }

}

// 继承Actor，表明这是一个Actor
class SayHelloActor extends Actor{
  // 当该Actor的MailBox接收到消息，就会调用receive
  // type Receive = scala.PartialFunction[scala.Any, scala.Unit]
  // Receive是一个偏函数
  override def receive: Receive = {
    case "hello" => println("收到hello，回应Hello too")
    case "ok" => println("收到ok，回应ok too")
    case "exit" => {
      println("准备终止，退出系统")
      // 退出ActorSystem
      context.stop(self)
      context.system.terminate()
    }
    case _ => println("不明白你在说什么")


  }
}
